/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package templadosimulado;

import java.util.ArrayList;
import java.util.Random;
/**
 *
 * @author DAVID
 */
public class TempladoSimulado {

    public static ArrayList<Curso> cursos=new ArrayList<Curso>();
    public static ArrayList<Salón> edificio=new ArrayList<Salón>();
    public static Horario[][] horariosLunes;
    public static Horario[][] horariosMartes;
    public static Horario[][] horariosMiercoles;
    public static Horario[][] horariosJueves;
    public static Horario[][] horariosViernes;
    public static int numH=6;
    public static int iteraciones=0;
    public static int temperatura=10;
    public static boolean todos=false;
    public static Random rnd = new Random();
    public static void main(String[] args) {
        // TODO code application logic here
        iniciaCursosYEdificio();
                        
        for(Curso temp : cursos){
            System.out.println(temp.toString());
        }     
        System.out.println();
        for(Salón temp : edificio){
            System.out.println(temp.toString());
        }
        System.out.println();
        horariosLunes=new Horario[edificio.size()][numH];
        horariosMartes=new Horario[edificio.size()][numH];
        horariosMiercoles=new Horario[edificio.size()][numH];
        horariosJueves=new Horario[edificio.size()][numH];
        horariosViernes=new Horario[edificio.size()][numH];
        inicializadorSalones();
        
        imprimirHorarios();
               
        System.out.println("Simulacion de Templado Simulado");
        System.out.println("Edificio compuesto por 6 salones");
        System.out.println();
        
        
        //FUNCION DE TEMPLADO
        while(todos==false){//rand dia 1 rand dia 2 4 posiciones
            int pos1=rnd.nextInt(horariosLunes.length);
            int pos2=0;
            do{
                pos2=rnd.nextInt(horariosLunes.length);
            }while(pos1==pos2);
            //System.out.println(pos1);

                    Curso swap1=horariosLunes[pos1][0].getCurso();
                    Curso swap2=horariosLunes[pos2][0].getCurso();
                    
                    
                    horariosLunes[pos1][0].setCurso(swap2);
                    horariosLunes[pos2][0].setCurso(swap1);
                
            
            suficiencia();
            iteraciones++;
        }
        System.out.println("Numero de iteraciones: "+ iteraciones);
        imprimirHorarios();
        
    }
    
    public static void suficiencia(){
        for(int i=0;i<6;i++){
           Horario temp = horariosLunes[i][0];
           int sal=temp.getSalon().getCapacidad();
           int cur=temp.getCurso().getInscritos();
           int total=sal-cur;
           //System.out.println(temp.getCurso().getNombre());
           if((total>=0)&&(total<=temperatura)){
               
               todos=true;
           }
           else{
               todos=false;
               break;
           }
        }  
    }
    
    public static void iniciaCursosYEdificio(){
        //sa
        cursos.add(new Curso("Algebra",20,1,2,0,false,false));//0
        cursos.add(new Curso("Ingenieria de Software",14,2,2,0,false,false));
        
        cursos.add(new Curso("Quimica Basica",56,3,2,0,false,false));
        cursos.add(new Curso("Fisica II",39,4,3,0,false,false));
        
        cursos.add(new Curso("Sistemas Inteligentes",10,5,2,0,false,false));
        cursos.add(new Curso("Estructuras de datos",5,6,2,0,false,false));
        
        edificio.add(new Salón(1,103,100,true,false));
        edificio.add(new Salón(1,104,100,true,false));//1
        edificio.add(new Salón(1,105,40,false,false));
        edificio.add(new Salón(2,205,40,false,false));
        edificio.add(new Salón(2,206,35,false,true));
        edificio.add(new Salón(2,208,35,false,true));
    }
    
    public static void inicializadorSalones(){
        for(int i=0;i<edificio.size();i++){
                horariosLunes[i][0]= new Horario("Lunes",7,9,edificio.get(i));
                horariosLunes[i][1]= new Horario("Lunes",9,11,edificio.get(i));
                horariosLunes[i][2]= new Horario("Lunes",11,13,edificio.get(i));
                horariosLunes[i][3]= new Horario("Lunes",14,16,edificio.get(i));
                horariosLunes[i][4]= new Horario("Lunes",16,18,edificio.get(i));
        }
         horariosLunes[0][0].setCurso(cursos.get(4));// for(){do rnd dia fila columna while(horario no curso) }
         //horariosLunes[0][0].setSalon(edificio.get(1));
         horariosLunes[1][0].setCurso(cursos.get(3));
         //horariosLunes[1][0].setSalon(edificio.get(4));
         horariosLunes[2][0].setCurso(cursos.get(1));
         //horariosLunes[2][0].setSalon(edificio.get(0));
         horariosLunes[3][0].setCurso(cursos.get(2));
         //horariosLunes[3][0].setSalon(edificio.get(5));
         horariosLunes[4][0].setCurso(cursos.get(5));
         //horariosLunes[4][0].setSalon(edificio.get(2));
         horariosLunes[5][0].setCurso(cursos.get(0));
         //horariosLunes[5][0].setSalon(edificio.get(3));
    }
    
    public static void imprimirHorarios(){
        
        for(int i=0;i<edificio.size();i++){
            //for(int j=0;j<numH;j++){
                System.out.println(horariosLunes[i][0]);
            //}
            
        }
        System.out.println();
    }
}

